#ifndef _REACTOR_
#define _REACTOR_

#include <sys/epoll.h>
#include<map>
#include <functional>
using namespace std;
typedef function<void(int)> Eventcallback_t;

class Reactor
{
public:
    Reactor();
    ~Reactor();
    /*　向reactor中注册一个新的监听通道　*/
    void addnewchannel(int fd,uint32_t events);
    /* 设置reactor中某一通道的可读事件回调函数　*/
    void setReadableCallback(int fd,Eventcallback_t readHandler)
    {
        readCallback_map.insert(make_pair(fd,readHandler));
    }
    /* 设置reactor中某一通道的可写事件回调函数　*/
    void setWriteableCallback(int fd,Eventcallback_t writeHandler)
    {
        writeCallback_map.insert(make_pair(fd,writeHandler));
    }
    /* 添加一个定时器，在时间到达后执行回调函数,返回一个timerfd*/
    int addTimer(unsigned int time_ms, Eventcallback_t timerHandle);
    /* 运行reactor */
    void loop();
private:
    bool quitloop;
    int epoll_fds;//epoll实例的描述符
    Eventcallback_t Handler_;
    struct epoll_event rp_events[30];//用于储存epoll返回的结果集
    map <int ,Eventcallback_t> readCallback_map;
    map <int ,Eventcallback_t> writeCallback_map;
};
#endif // _IODRIVE_H_


